﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace EntitiesLayer
{


    public class Mission: IEntity
    {
        private int id;
        public int Id {
            get { return id; }
            set { id = value; }
        }
        private string nombre;
        public string Nombre {

            set { nombre = value; }
            get { return nombre; }
        }
        private string tripulantes;
        public string Tripulantes {
            set { tripulantes = value; }
            get { return tripulantes; }
        }
        private DateTime fechaLanzamiento;
        public DateTime FechaLanzamiento {
            get { return fechaLanzamiento; }
            set { fechaLanzamiento = value; }
        }
        private TimeSpan duracion;
        public TimeSpan Duracion {
            set { duracion = value; }
            get { return duracion; }
        }
        private string datosInteres;
        public string DatosInteres {
            set { datosInteres = value; }
            get { return datosInteres; }
        }
        private string resultado;
        public string Resultado {
            set { resultado = value; }
            get { return resultado; }
        }
        private Bitmap insignia;
        public Bitmap Insignia {
            set { insignia = value; }
            get { return insignia; }
        }
        private string nave;
        public string Nave
        {
            get { return nave; }
            set { nave = value; }
        }

        private readonly Lazy<ProgramaEspacial> programa;
        public ProgramaEspacial Programa
        {
            get { return programa!=null?programa.Value:null; }
        }
        private int idProgramaEspacial;
        public int IdProgramaEspacial
        {
            get { return idProgramaEspacial; }
        }

        private int idCuerpoCeleste;
        public int IdCuerpoCeleste {
            get { return idCuerpoCeleste; }
        }
        private readonly Lazy<CuerpoCeleste> planetaDestino;
        public CuerpoCeleste PlanetaDestino{
            get { return planetaDestino.Value; }
        }
        



        public Mission(string nombre, string tripulantes, DateTime fechaLanzamiento, 
            TimeSpan duracion, string datosInteres, string resultado, Bitmap insignia, string nave, 
            int idProgramaEspacial, int idCuerpoCeleste,
            Lazy<CuerpoCeleste> lazyDelegateCuerpo = null, 
            Lazy<ProgramaEspacial> lazyDelegatePrograma = null, int id=0)
        {
                this.idProgramaEspacial = idProgramaEspacial;
                this.idCuerpoCeleste = idCuerpoCeleste;
                planetaDestino = lazyDelegateCuerpo;
                programa = lazyDelegatePrograma;
                Id = id;
                Nombre = nombre;
                Tripulantes = tripulantes;
                FechaLanzamiento = fechaLanzamiento;
                Duracion = duracion;
                DatosInteres = datosInteres;
                Resultado = resultado;
                Insignia = insignia;
                Nave = nave;
               
                
        }


        public override string ToString()
        {
            return "Id: "+Id.ToString() 
                    +"\nNombre: "+Nombre.ToString()
                        +"\nTripulantes: "+Tripulantes
                        + "\nFechaLanzamiento: "+FechaLanzamiento.ToString()
                        +"\nDuracion"+Duracion.ToString()
                        +"\nDatosInteres: "+DatosInteres
                        +"\nResultado: "+Resultado
                        +"\nNave: "+Nave
                        +(PlanetaDestino==null? "" : "\n\nPlanetaDestino: " +PlanetaDestino.ToString())
                        +(Programa == null ? "" : "\n\nProgramaEspacial: " + Programa.ToString());
        }
    }

}
